home *** CD-ROM | disk | FTP | other *** search
/ The Guided Tour of Multimedia (Second Edition) / The Guided Tour of Multimedia (Second Edition).iso / trials / photoshp / disk1 / photoshp.mst < prev    next >
Text File  |  1994-11-09  |  27KB  |  884 lines

  1. '*           Adobe Photoshop Installer
  2. '*
  3. '* June 5, 1993  Marshall Spight (original Premiere ver)
  4. '* June 16, 1993 Dave Corboy (modified for Photoshop)
  5. '*
  6. '*
  7. '*
  8. '*
  9.  
  10. '$DEFINE DEBUG  ''Define for script development/debugging
  11.  
  12. '$INCLUDE 'setupapi.inc'
  13. '$INCLUDE 'msdetect.inc'
  14.  
  15. ''CONST B$ = "Installation Problem"
  16. ''CONST C$ = "Setup sources were corrupted!"
  17.  
  18. '' It's always hard to remember the syntax of the following function:
  19. ''i% = DoMsgBox( "Foo", "Bar", MB_OK )
  20.  
  21. ''following were taken from windows.h. &H means they're hex
  22. CONST WS_VISIBLE=&H10000000
  23. CONST WS_BORDER =&H00800000
  24. CONST WS_CLIPCHILDREN =&H02000000
  25. CONST GWL_STYLE =-16
  26. CONST SW_SHOWMAXIMIZED=3
  27.  
  28.  
  29.  
  30. DECLARE FUNCTION ShowWindow  LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  31. DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%, offset%, style&) AS LONG
  32.  
  33.  
  34. ''Dialog ID's
  35. CONST ASKQUIT      = 100
  36. CONST DESTPATH     = 200
  37. CONST EXITFAILURE  = 300
  38. CONST EXITQUIT     = 400
  39. CONST EXITSUCCESS  = 500
  40. CONST EXITRESTART  = 550
  41. CONST OPTIONS      = 600
  42. CONST APPHELP      = 700
  43. CONST CUSTINST     = 800
  44. CONST CUSTINSTCD   = 801
  45. CONST TOOBIG       = 900
  46. CONST BADPATH      = 1000
  47. CONST NOVM         = 1100
  48. CONST NEED31       = 1200
  49. CONST NEEDENH      = 1300
  50. CONST NEEDSHARE    = 1400
  51. CONST CORRUPT      = 1500
  52.  
  53. CONST PERSONALIZE  = 10000
  54.  
  55. ''Bitmap ID
  56. CONST LOGO         = 1
  57.  
  58. ''File Types
  59.  
  60. CONST PROGRAMFILES  = 1
  61. CONST TUTORIALFILES = 2
  62. CONST PATTERNFILES  = 3
  63. CONST DUOTONEFILES  = 4
  64. CONST FILTERFILES   = 5
  65. CONST DELUXEFILES   = 6
  66.  
  67. CONST   NUMGROUPS      = 6      '' Number of file groups: PROGRAM to TUTORIAL
  68.  
  69.  
  70. GLOBAL DEST$        ''Default destination directory.
  71. GLOBAL DESTSYS$
  72. GLOBAL DEST32S$
  73. GLOBAL WINDRIVE$    ''Windows drive letter.
  74. GLOBAL WINDIR$      ''Windows directory without drive letter.
  75. GLOBAL PHOTOCDDRIVE$
  76. GLOBAL PHOTOCDPT$
  77. GLOBAL PHOTOCDCP$
  78. GLOBAL ENOUGHDISK%  ''Enough space to install
  79. GLOBAL QTWDIR$
  80.  
  81. ''CustInst list symbol names
  82.  
  83. GLOBAL PROGRAMNEEDS$
  84. GLOBAL TUTORIALNEEDS$
  85. GLOBAL PATTERNNEEDS$
  86. GLOBAL DUOTONENEEDS$
  87. GLOBAL FILTERNEEDS$
  88. GLOBAL DELUXENEEDS$
  89.  
  90. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  91. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  92.  
  93. ''Dialog list symbol names
  94. GLOBAL CHECKSTATES$
  95. GLOBAL STATUSTEXT$
  96. GLOBAL DRIVETEXT$
  97.  
  98. GLOBAL InstallWin32s%
  99. GLOBAL CD%
  100.  
  101. DECLARE SUB AddOptFilesToCopyList (ftype%, bogus%)
  102. DECLARE SUB RecalcOptFiles (ftype%)
  103. DECLARE SUB RecalcPath
  104. DECLARE SUB SetDriveStatus
  105. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  106. DECLARE FUNCTION CDInstall LIB "mscuistf.dll" AS INTEGER
  107. DECLARE FUNCTION GetCDDrive LIB "mscuistf.dll" AS INTEGER
  108. DECLARE SUB XXX LIB "mscuistf.dll" (arg$)
  109. DECLARE SUB FixScreenProc LIB "mscuistf.dll" (arg%)
  110. DECLARE SUB UpdateSystemIni
  111.  
  112. DECLARE FUNCTION MakeSystemIni LIB "INIUPD.DLL" (arg1$, arg2$) AS INTEGER
  113. DECLARE FUNCTION RestartWindows LIB "INIUPD.DLL" AS INTEGER
  114. DECLARE FUNCTION OnWindowsNT LIB "INIUPD.DLL" AS INTEGER
  115. DECLARE FUNCTION PagingEnabled LIB "INIUPD.DLL" AS INTEGER
  116. DECLARE FUNCTION ShareEnabled LIB "INIUPD.DLL" AS INTEGER
  117. DECLARE FUNCTION IsWin32sLoaded LIB "INIUPD.DLL" (arg1$) AS INTEGER
  118. DECLARE FUNCTION ExitWindowsExec LIB "USER.EXE" (arg1$, arg2$) AS INTEGER
  119.  
  120.  
  121.  
  122. INIT:
  123.     hWnd%=HwndFrame()
  124.     FixScreenProc ( hWnd% )
  125.     SWLxx&=SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE+WS_BORDER+WS_CLIPCHILDREN)
  126.     SWyy%=ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  127.  
  128.     INSTALLDLL$ = "mscuistf.dll"        ''custom functions
  129.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  130.  
  131.     SetBitmap INSTALLDLL$, LOGO
  132.     SetTitle "Adobe Photoshop Installer"
  133.  
  134.     IF CDInstall() AND OnWindowsNT() = 0 THEN
  135.         CD = 1
  136.     ELSE
  137.         CD = 0
  138.     END IF
  139.  
  140.  
  141.     MajorVer% = GetWindowsMajorVersion()
  142.     MinorVer% = GetWindowsMinorVersion()
  143.  
  144.     IF MajorVer% < 3 OR (MajorVer% = 3 AND MinorVer% < 10) THEN
  145.         sz$ = UIStartDlg(INSTALLDLL$, NEED31, "FInfo0DlgProc", 0, "")
  146.         UIPop 1
  147.         ERR% = STFQUIT '' Need windows 3.1 or later.
  148.         GOTO QUIT
  149.     END IF
  150.  
  151.  
  152.     InstallWin32s = 1
  153.     IF MajorVer% > 3 THEN
  154.         InstallWin32s% = 0
  155.     END IF
  156.  
  157.  
  158.     IF OnWindowsNT() THEN
  159.         InstallWin32s% = 0
  160.     ELSE
  161.         IF GetWindowsMode < 2 THEN
  162.             sz$ = UIStartDlg(INSTALLDLL$, NEEDENH, "FInfo0DlgProc", 0, "")
  163.             UIPop 1
  164.             ERR% = STFQUIT '' Not Enhanced mode.
  165.             GOTO QUIT
  166.         END IF
  167.     END IF
  168.  
  169.  
  170.     '' Get version of Win32s to be installed from version info in file
  171.     szNewVer$ = GetVersionOfFile( GetSymbolValue("STF_SRCDIR") + "WIN32S16.DLL" )
  172.  
  173.     DESTSYS$ = GetWindowsSysDir()
  174.     DEST32S$ = DESTSYS$ + "WIN32S\"
  175.     szOldVer$ ="1.00.000     "          ''Reserve space in string for version
  176.     '' If Win32s is already installed, get running version number
  177.     i% = DoesFileExist( DESTSYS$ + "W32SYS.DLL", femExists )
  178.     IF i% = 1 THEN
  179.     i% = IsWin32sLoaded( szOldVer$ )
  180.     ENDIF
  181.  
  182.     IF i% <> 0  AND  szNewVer$ <> "" THEN
  183.         IF szNewVer$ > szOldVer$ THEN
  184.             '' do nothing
  185.         ELSE
  186.             InstallWin32s% = 0
  187.         END IF
  188.     END IF
  189.  
  190.     IF InstallWin32s = 1 AND PagingEnabled() = 0 THEN
  191.     sz$ = UIStartDlg(INSTALLDLL$, NOVM, "FInfo0DlgProc", 0, "")
  192.     UIPop 1
  193.     ERR% = STFQUIT '' Enhanced mode but not paging
  194.     GOTO QUIT
  195.     END IF
  196.  
  197.     ''IF ShareEnabled() = 0 THEN
  198.     ''sz$ = UIStartDlg(INSTALLDLL$, NEEDSHARE, "FInfo0DlgProc", 0, "")
  199.     ''UIPop 1
  200.     ''ERR% = STFQUIT
  201.     ''GOTO QUIT
  202.     ''END IF
  203.  
  204.  
  205.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  206.     IF szInf$ = "" THEN
  207.             szInf$ = GetSymbolValue("STF_CWDDIR") + "PHOTOSHP.INF"
  208.     END IF
  209.     ReadInfFile szInf$
  210.  
  211.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  212.     IF OnWindowsNT() THEN
  213.         DEST$ = WINDRIVE$ + ":\WIN32APP\PHOTOSHP"
  214.     ELSE
  215.         DEST$ = WINDRIVE$ + ":\PHOTOSHP"
  216.     END IF
  217.     SetRestartDir GetWindowsDir()
  218.     QTWDIR$ = GetWindowsSysDir()
  219.  
  220.     ''CustInst list symbols
  221.     CHECKSTATES$ = "CheckItemsState"
  222.     STATUSTEXT$  = "StatusItemsText"
  223.     DRIVETEXT$   = "DriveStatusText"
  224.     FOR i% = 1 TO NUMGROUPS STEP 1
  225.     AddListItem CHECKSTATES$, "ON"
  226.     NEXT i%
  227.     FOR i% = 1 TO NUMGROUPS STEP 1
  228.     AddListItem STATUSTEXT$, ""
  229.     NEXT i%
  230.     FOR i% = 1 TO 7 STEP 1
  231.     AddListItem DRIVETEXT$, ""
  232.     NEXT i%
  233.     ReplaceListItem DRIVETEXT$, 7, DEST$
  234.  
  235.     ''Disk cost list symbols
  236.  
  237.     PROGRAMNEEDS$  = "ProgramNeeds"
  238.     TUTORIALNEEDS$ = "TutorialNeeds"
  239.     PATTERNNEEDS$  = "PatternNeeds"
  240.     DUOTONENEEDS$  = "DuotoneNeeds"
  241.     FILTERNEEDS$   = "FilterNeeds"
  242.     DELUXENEEDS$   = "DeluxeNeeds"
  243.  
  244.     EXTRACOSTS$ = "ExtraCosts"
  245.     BIGLIST$    = "BigList"
  246.  
  247.     FOR i% = 1 TO NUMGROUPS STEP 1
  248.     AddListItem BIGLIST$, ""
  249.     NEXT i%
  250.     FOR i% = 1 TO 26 STEP 1
  251.     AddListItem EXTRACOSTS$, "0"
  252.     NEXT i%
  253.  
  254.     '' PhotoCD rigamarole
  255.     WINDIR$ = MID$( GetWindowsDir(), 3, LEN( GetWindowsDir() ) - 2 )
  256.     IF  DoesFileExist( GetWindowsDir() + "kpcms.ini", femExists ) = 1 THEN
  257.         PHOTOCDDRIVE$ = GetIniKeyString( GetWindowsDir() + "KPCMS.INI", "KEPS Precision", "DRIVE" )
  258.         PHOTOCDPT$ = GetIniKeyString( GetWindowsDir() + "KPCMS.INI", "API", "PT_DIR" )
  259.         PHOTOCDCP$ = GetIniKeyString( GetWindowsDir() + "KPCMS.INI", "KCP", "CP_DIR" )
  260.     ELSE
  261.         PHOTOCDDRIVE$ = WINDRIVE$ + ":"
  262.         PHOTOCDPT$ = WINDIR$ + "PHOTOCD\"
  263.         PHOTOCDCP$ = WINDIR$ + "PHOTOCD\"
  264.         CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "KEPS Precision", "DRIVE", WINDRIVE$ + ":", cmoOverwrite
  265.         CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "API", "PT_DIR", PHOTOCDPT$, cmoOverwrite
  266.         CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "KCP", "CP_DIR", PHOTOCDCP$, cmoOverwrite
  267.  
  268.         CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "API", "CFG_FILE", "KPPrefs.cfg", cmoOverwrite
  269.         CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "KCP", "CTE_NAME", "", cmoOverwrite
  270.  
  271.         CreateDir GetWindowsDir() + "PHOTOCD", cmoNone
  272.  
  273.     END IF
  274.  
  275.     RecalcPath
  276.     SetDriveStatus
  277.  
  278. '$IFDEF DEBUG
  279.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  280. '$ENDIF ''DEBUG
  281.  
  282.  
  283.  
  284. CUSTINST:
  285.     ''IF CD <> 0 THEN
  286.         ''sz$ = UIStartDlg(INSTALLDLL$, CUSTINSTCD, "FCustInstDlgProc", APPHELP, HELPPROC$)
  287.     ''ELSE
  288.         ''sz$ = UIStartDlg(INSTALLDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  289.     ''END IF
  290.  
  291.     GOTO GETPATH
  292.  
  293. CUSTINST2:
  294.  
  295.     ''IF sz$ = "CONTINUE" THEN
  296.         ''Install only if it will fit.
  297.         IF ENOUGHDISK% = 0 THEN
  298.             GOSUB TOOBIG
  299.             GOTO CUSTINST
  300.         END IF
  301.     UIPop 1
  302.     GOTO INSTALL
  303.  
  304.     ''ELSEIF sz$ = "PATH" THEN
  305.     ''GOTO GETPATH
  306.     ''ELSEIF sz$ = "CHK1" THEN
  307.     ''RecalcOptFiles PROGRAMFILES
  308.     ''SetDriveStatus
  309.     ''GOTO CUSTINST
  310.     ''ELSEIF sz$ = "CHK2" THEN
  311.     ''RecalcOptFiles TUTORIALFILES
  312.     ''SetDriveStatus
  313.     ''GOTO CUSTINST
  314.     ''ELSEIF sz$ = "CHK3" THEN
  315.     ''RecalcOptFiles PATTERNFILES
  316.     ''SetDriveStatus
  317.     ''GOTO CUSTINST
  318.     ''ELSEIF sz$ = "CHK4" THEN
  319.     ''RecalcOptFiles DUOTONEFILES
  320.     ''SetDriveStatus
  321.     ''GOTO CUSTINST
  322.     ''ELSEIF sz$ = "CHK5" THEN
  323.     ''RecalcOptFiles FILTERFILES
  324.     ''SetDriveStatus
  325.     ''GOTO CUSTINST
  326.     ''ELSEIF sz$ = "CHK6" THEN
  327.     ''IF CD <> 0 THEN
  328.         ''RecalcOptFiles DELUXEFILES
  329.     ''END IF
  330.     ''SetDriveStatus
  331.     ''GOTO CUSTINST
  332.     ''ELSEIF sz$ = "REACTIVATE" THEN
  333.     ''RecalcPath
  334.     ''SetDriveStatus
  335.     ''GOTO CUSTINST
  336.     ''ELSE
  337.     ''GOSUB ASKQUIT
  338.     ''GOTO CUSTINST
  339.     ''END IF    ***
  340.  
  341.  
  342.  
  343. INSTALL:
  344.  
  345.     IF (MID$(DEST$, LEN(DEST$), 1) <> ":") THEN
  346.         CreateDir DEST$, cmoNone
  347.     END IF
  348.  
  349. ''    IF GetListItem(CHECKSTATES$, PROGRAMFILES) = "ON" THEN    ***
  350.  
  351. ''TRYAGAIN:    ***
  352.         ''sz$ = UIStartDlg(INSTALLDLL$, PERSONALIZE, "dlgPERinstall", 0, "" )
  353.         ''IF sz$ <> "VALID" THEN
  354.             ''GOSUB ASKQUIT
  355.             ''UIPop 1
  356.             ''GOTO TRYAGAIN
  357.         ''END IF
  358.  
  359. ''    END IF    ***
  360.  
  361.     IF GetListItem( CHECKSTATES$, PROGRAMFILES ) = "ON" THEN
  362.         RemoveFile GetWindowsDir() + "PHOTOS30.INI", cmoNone
  363.         ''RemoveFile GetWindowsDir() + "PHOTOS30.PSP", cmoNone
  364.         CreateDir DEST$ + "\PLUGINS", cmoNone
  365.         ''CreateDir DEST$ + "\CMDSETS", cmoNone    ***
  366.         ''CreateDir DEST$ + "\CALIBRAT", cmoNone    ***
  367.         ''CreateDir DEST$ + "\BRUSHES", cmoNone    ***
  368.         ''CreateDir DEST$ + "\PALETTES", cmoNone    ***
  369.  
  370.         IF InstallWin32s = 1 THEN
  371.             CreateDir DEST32S$, cmoNone
  372.             IF  DoesFileExist( GetWindowsSysDir() + "olecli.dll", femExists ) = 1 THEN
  373.                 IF  DoesFileExist( GetWindowsSysDir() + "olecli.w31", femExists ) = 0 THEN
  374.                     CopyFile GetWindowsSysDir() + "olecli.dll", GetWindowsSysDir() + "olecli.w31", cmoOverwrite, 0
  375.                 END IF
  376.             END IF
  377.         END IF
  378.  
  379.     END IF
  380.  
  381.  
  382.     IF GetListItem( CHECKSTATES$, TUTORIALFILES ) = "ON" THEN
  383.             CreateDir DEST$ + "\TUTORIAL", cmoNone
  384.     END IF
  385.  
  386.     ''IF GetListItem( CHECKSTATES$, PATTERNFILES ) = "ON" THEN    ***
  387.             ''CreateDir DEST$ + "\PATTERNS", cmoNone
  388.     ''END IF
  389.  
  390.     ''IF GetListItem( CHECKSTATES$, DUOTONEFILES ) = "ON" THEN    ***
  391.             ''CreateDir DEST$ + "\DUOTONES\DUOTONE\PMS", cmoNone
  392.             ''CreateDir DEST$ + "\DUOTONES\DUOTONE\PROCESS", cmoNone
  393.             ''CreateDir DEST$ + "\DUOTONES\DUOTONE\GRAY", cmoNone
  394.             ''CreateDir DEST$ + "\DUOTONES\TRITONE\PMS", cmoNone
  395.             ''CreateDir DEST$ + "\DUOTONES\TRITONE\PROCESS", cmoNone
  396.             ''CreateDir DEST$ + "\DUOTONES\TRITONE\GRAY", cmoNone
  397.             ''CreateDir DEST$ + "\DUOTONES\QUADTONE\PMS", cmoNone
  398.             ''CreateDir DEST$ + "\DUOTONES\QUADTONE\PROCESS", cmoNone
  399.             ''CreateDir DEST$ + "\DUOTONES\QUADTONE\GRAY", cmoNone
  400.     ''END IF
  401.  
  402.     IF GetListItem( CHECKSTATES$, FILTERFILES ) = "ON" THEN
  403.         CreateDir DEST$ + "\PLUGINS", cmoNone
  404.         CreateDir DEST$ + "\PLUGINS\LtStyles", cmoNone
  405.         ''CreateDir DEST$ + "\3RDPARTY", cmoNone
  406.     END IF
  407.  
  408.     ClearCopyList
  409.  
  410.  
  411.     AddOptFilesToCopyList PROGRAMFILES, 0
  412.     AddOptFilesToCopyList TUTORIALFILES, 0
  413.     AddOptFilesToCopyList PATTERNFILES, 0
  414.     AddOptFilesToCopyList DUOTONEFILES, 0
  415.     AddOptFilesToCopyList FILTERFILES, 0
  416.     IF CD <> 0 THEN
  417.         AddOptFilesToCopyList DELUXEFILES, 0
  418.     END IF
  419.     CopyFilesInCopyList
  420.  
  421. ''    IF  DoesFileExist( GetWindowsDir() + "photos30.ini", femExists ) = 0 THEN
  422. ''      RenameFile GetWindowsDir() + "photoshp.ini", "photos25.ini"
  423. ''      RenameFIle GetWindowsDir() + "photoshp.psp", "photos25.psp"
  424. ''    END IF
  425.  
  426.     IF GetListItem(CHECKSTATES$, PROGRAMFILES) = "ON" THEN
  427.         ''Updating PHOTOSHOP.INI and SYSTEM.INI
  428.         IF  DoesFileExist( GetWindowsDir() + "photoshp.ini", femExists ) = 1 THEN
  429.             CreateIniKeyValue GetWindowsDir() + "photoshp.ini", "Photoshop", "NOTE", "The name of the INI file for Photoshop 3.0 is photos30.ini", cmoOverwrite
  430.         END IF
  431.  
  432.         CreateIniKeyValue GetWindowsDir() + "photos30.ini", "Photoshop", "PhotoshopDirectory", DEST$ + "\", cmoOverwrite
  433.         CreateIniKeyValue GetWindowsDir() + "photos30.ini", "Photoshop", "PlugInDirectory", DEST$ + "\PLUGINS", cmoOverwrite
  434.         CreateIniKeyValue GetWindowsDir() + "photos30.ini", "Photoshop", "StartUpImageDirectory", DEST$ + "\TUTORIAL", cmoOverwrite
  435.         CopyFile GetWindowsDir() + "system.ini", GetWindowsDir() + "system.bak", cmoOverwrite, 0
  436.         CreateIniKeyValue GetWindowsDir() + "system.ini", "drivers", "adobekey", "adobekey.drv", cmoOverwrite
  437.         CreateIniKeyValue GetWindowsDir() + "system.ini", "drivers", "adobemse", "adobemse.drv", cmoOverwrite
  438.  
  439.         CreateIniKeyValue "win.ini", "Extensions", "psd", DEST$ + "\photoshp.exe ^.psd", cmoOverwrite
  440.  
  441.  
  442.         ''XXX ( DEST$ )    ***
  443.  
  444.         IF InstallWin32s = 1 THEN
  445.  
  446.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "0", cmoOverwrite
  447.  
  448.             '' Indicate Win32s install failure until all files known to be copied.
  449.             ExitCode% = EXITFAILURE
  450.             ERR = 0
  451.             UpdateSystemIni
  452.             '' Terminate if unhandled fatal error
  453.             IF ERR <> 0 THEN
  454.                 GOTO QUIT
  455.             END IF
  456.  
  457.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Setup", "1", cmoOverwrite
  458.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Win32s", "Version", szNewVer$, cmoOverwrite
  459.             CreateIniKeyValue DESTSYS$ + "WIN32S.INI", "Nls", "AnsiCP", "1252", cmoOverwrite
  460.  
  461.         END IF
  462.  
  463.         ''WINDIR$ = MID$( GetWindowsDir(), 3, LEN( GetWindowsDir() ) - 2 )
  464.         ''CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "KEPS Precision", "DRIVE", WINDRIVE$ + ":", cmoOverwrite
  465.         ''CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "API", "PT_DIR", WINDIR$ + "PHOTOCD\", cmoOverwrite
  466.         ''CreateIniKeyValue GetWindowsDir() + "KPCMS.INI", "KCP", "CP_DIR", WINDIR$ + "PHOTOCD\", cmoOverwrite
  467.  
  468.         CDDRIVENUM% = -1
  469.         IF CD <> 0 THEN
  470.             IF GetListItem( CHECKSTATES$, DELUXEFILES ) = "ON" THEN
  471.                 CDDRIVENUM% = GetCDDrive()
  472.             END IF
  473.         END IF
  474.  
  475.         CreateProgmanGroup "Adobe", "", cmoNone
  476.         ShowProgmanGroup  "Adobe", 1, cmoNone
  477.  
  478.         CreateProgmanItem "Adobe", "Photoshop 3.0 Tryout", MakePath( DEST$, "photoshp.exe" ), "", cmoOverwrite
  479.         CreateProgmanItem "Adobe", "Photoshop ReadMe", "write.exe " + MakePath( DEST$, "psreadme.wri" ), "", cmoOverwrite
  480.  
  481.         IF CDDRIVENUM% >= 0 THEN
  482.             CDDRIVE$ = CHR$( CDDRIVENUM% + ASC( "A" ) )
  483.             CreateProgmanItem "Adobe", "Photoshop 3.0 Deluxe CD", CDDRIVE$ + ":\psdeluxe\psdeluxe.exe", "psdeluxe.ico", cmoOverwrite
  484.         END IF
  485.  
  486.     ELSE
  487.         IF CD <> 0 THEN
  488.             IF GetListItem( CHECKSTATES$, DELUXEFILES ) = "ON" THEN
  489.                 CDDRIVENUM% = -1
  490.                 CDDRIVENUM% = GetCDDrive()
  491.                 IF CDDRIVENUM% >= 0 THEN
  492.                     CreateProgmanGroup "Adobe", "", cmoNone
  493.                     ShowProgmanGroup  "Adobe", 1, cmoNone
  494.                     CDDRIVE$ = CHR$( CDDRIVENUM% + ASC( "A" ) )
  495.                     CreateProgmanItem "Adobe", "Photoshop 3.0 Deluxe CD", CDDRIVE$ + ":\psdeluxe\psdeluxe.exe", "psdeluxe.ico", cmoOverwrite
  496.                 END IF
  497.             END IF
  498.         END IF 
  499.     END IF                                              
  500.  
  501.  
  502.  
  503. QUIT:
  504.     ON ERROR GOTO ERRQUIT
  505.  
  506.     IF ERR = 0 THEN
  507.         IF RestartListEmpty() = 0  OR  InstallWin32s = 1  THEN
  508.             GOTO QUITR
  509.         ELSE
  510.             dlg% = EXITSUCCESS
  511.         END IF
  512.     ELSEIF ERR = STFQUIT THEN
  513.         dlg% = EXITQUIT
  514.     ELSE
  515.         dlg% = EXITFAILURE
  516.     END IF
  517.  
  518. QUITL1:
  519.     sz$ = UIStartDlg(INSTALLDLL$, dlg%, "FInfo0DlgProc", 0, "")
  520.     IF sz$ = "REACTIVATE" THEN
  521.     GOTO QUITL1
  522.     END IF
  523.     UIPop 1
  524.  
  525.     END
  526.  
  527. QUITR:
  528.     sz$ = UIStartDlg(INSTALLDLL$, EXITRESTART, "FInfo0DlgProc", 0, "")
  529.     IF sz$ = "REACTIVATE" THEN
  530.     GOTO QUITR
  531.     END IF
  532.     UIPop 1
  533.  
  534.     i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  535.  
  536. ''      i% = RestartListEmpty()
  537. ''      IF i% = 0 THEN
  538. ''              i% = ExitExecRestart()
  539. ''      ELSE
  540. ''              i% = ExitWindowsExec( GetWindowsDir() + "_MSRSTRT.EXE", "_MSSETUP.BAT" )
  541. ''      ENDIF
  542.     GOTO QUITR
  543.  
  544. ERRQUIT:
  545.     sz$ = UIStartDlg(INSTALLDLL$, CORRUPT, "FInfo0DlgProc", 0, "")
  546.     UIPop 1
  547.     END
  548.  
  549. GETPATH:
  550.     SetSymbolValue "EditTextIn", DEST$
  551.     SetSymbolValue "EditFocus", "END"
  552. GETPATHL1:
  553.     sz$ = UIStartDlg(INSTALLDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  554.  
  555.     IF sz$ = "CONTINUE" THEN
  556.     olddest$ = DEST$
  557.     DEST$ = GetSymbolValue("EditTextOut")
  558.  
  559.     ''Validate new path.
  560.     IF IsDirWritable(DEST$) = 0 THEN
  561.         GOSUB BADPATH
  562.         GOTO GETPATHL1
  563.     END IF
  564.     UIPop 1
  565.  
  566.     IF (MID$(DEST$, LEN(DEST$), 1) = "\") THEN
  567.         DEST$ = MID$(DEST$, 1, LEN(DEST$)-1)
  568.     END IF
  569.  
  570.     ''Truncate display if too long.
  571.     IF LEN(DEST$) > 23 THEN
  572.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  573.     ELSE
  574.         ReplaceListItem DRIVETEXT$, 7, DEST$
  575.     END IF
  576.  
  577.     ''Recalc if path changed.
  578.     IF (olddest$ <> DEST$) THEN
  579.         RecalcPath
  580.         SetDriveStatus
  581.     END IF
  582.  
  583.     olddest$ = ""
  584.     '' GOTO CUSTINST changed to GOTO CUSTINST2
  585.     GOTO CUSTINST2
  586.     ELSEIF sz$ = "REACTIVATE" THEN
  587.     RecalcPath
  588.     SetDriveStatus
  589.     GOTO GETPATHL1
  590.         '' ELSEIF changed to ELSE
  591.     ''ELSEIF sz$ = "EXIT" THEN    ***
  592.         ELSE
  593.             GOSUB ASKQUIT
  594.             GOTO GETPATHL1
  595.     ''ELSE    ***
  596.             ''UIPop 1
  597.             ''GOTO CUSTINST
  598.     END IF
  599.  
  600.  
  601.  
  602. TOOBIG:
  603.     sz$ = UIStartDlg(INSTALLDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  604.     IF sz$ = "REACTIVATE" THEN
  605.     RecalcPath
  606.     SetDriveStatus
  607.     GOTO TOOBIG
  608.     END IF
  609.     UIPop 1
  610.     RETURN
  611.  
  612.  
  613.  
  614. BADPATH:
  615.     sz$ = UIStartDlg(INSTALLDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  616.     IF sz$ = "REACTIVATE" THEN
  617.     RecalcPath
  618.     SetDriveStatus
  619.     GOTO BADPATH
  620.     END IF
  621.     UIPop 1
  622.     RETURN
  623.  
  624.  
  625.  
  626. ASKQUIT:
  627.     sz$ = UIStartDlg(INSTALLDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  628.  
  629.     IF sz$ = "EXIT" THEN
  630.     UIPopAll
  631.     ERROR STFQUIT
  632.     ELSEIF sz$ = "REACTIVATE" THEN
  633.     GOTO ASKQUIT
  634.     ELSE
  635.     UIPop 1
  636.     END IF
  637.     RETURN
  638.  
  639.  
  640.  
  641. '**
  642. '** Purpose:
  643. '**     Adds the specified option files to the copy list.
  644. '** Arguments:
  645. '**     ftype%  - type of files to add, one of the following:
  646. '**             PROGRAMFILES, DUOTONEFILES ...
  647. '** Returns:
  648. '**     none.
  649. '*************************************************************************
  650. SUB AddOptFilesToCopyList (ftype%, bogus%) STATIC
  651.  
  652.     IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN
  653.         SrcDir$ = GetSymbolValue("STF_SRCDIR")
  654.         IF ftype% = PROGRAMFILES THEN
  655.             AddSectionFilesToCopyList "ProgramFiles", SrcDir$, DEST$ + "\"
  656.             AddSectionFilesToCopyList "PluginFiles", SrcDir$, DEST$ + "\plugins"
  657.             AddSectionFilesToCopyList "ProgramWinSysNTFiles", SrcDir$, GetWindowsSysDir()
  658.             AddSectionFilesToCopyList "PhotoCDPT", SrcDir$, PHOTOCDDRIVE$ + PHOTOCDPT$
  659.             AddSectionFilesToCopyList "PhotoCDCP", SrcDir$, PHOTOCDDRIVE$ + PHOTOCDCP$
  660.             IF OnWindowsNT() = 0 THEN
  661.                 AddSectionFilesToCopyList "PluginFiles16", SrcDir$, DEST$ + "\plugins"
  662.                 AddSectionFilesToCopyList "ProgramWinSysFiles", SrcDir$, GetWindowsSysDir()
  663.             ''ELSE    ***
  664.                 ''AddSectionFilesToCopyList "PluginFiles32", SrcDir$, DEST$ + "\plugins"    ***
  665.             END IF
  666.             ''AddSectionFilesToCopyList "CmdSets", SrcDir$, DEST$ + "\cmdsets"    ***
  667.             AddSectionFilesToCopyList "ProgramWinFiles", SrcDir$, GetWindowsDir()
  668.             ''AddSectionFilesToCopyList "CalibrateFiles", SrcDir$, DEST$ + "\calibrat"    ***
  669.             ''AddSectionFilesToCopyList "BrushFiles", SrcDir$, DEST$ + "\brushes"    ***
  670.             ''AddSectionFilesToCopyList "PaletteFiles", SrcDir$, DEST$ + "\palettes"    ***
  671.             IF bogus% = 1 THEN
  672.                 AddSectionFilesToCopyList "BogusFiles", SrcDir$, DEST$ + "\"
  673.             ELSE
  674.                 AddSectionFilesToCopyList "SplitFiles", SrcDir$, DEST$ + "\"
  675.             END IF
  676.             IF InstallWin32s = 1 THEN
  677.                 AddSectionFilesToCopyList "Win32sWinSys", SrcDir$, DESTSYS$
  678.                 AddSectionFilesToCopyList "Win32sWinSysWin32s", SrcDir$, DESTSYS$ + "WIN32S\"
  679.             END IF
  680.         ELSEIF ftype% = TUTORIALFILES THEN
  681.             AddSectionFilesToCopyList "TutorialFiles", SrcDir$, DEST$ + "\tutorial"
  682.         ''ELSEIF ftype% = PATTERNFILES THEN    ***
  683.             ''AddSectionFilesToCopyList "PatternFiles", SrcDir$, DEST$ + "\patterns"    ***
  684.         ''ELSEIF ftype% = DUOTONEFILES THEN    ***
  685.             ''AddSectionFilesToCopyList "DuoDuoPms", SrcDir$, DEST$ + "\duotones\duotone\pms"
  686.             ''AddSectionFilesToCopyList "DuoDuoProc", SrcDir$, DEST$ + "\duotones\duotone\process"
  687.             ''AddSectionFilesToCopyList "DuoDuoGray", SrcDir$, DEST$ + "\duotones\duotone\gray"
  688.             ''AddSectionFilesToCopyList "DuoTriPms", SrcDir$, DEST$ + "\duotones\tritone\pms"
  689.             ''AddSectionFilesToCopyList "DuoTriProc", SrcDir$, DEST$ + "\duotones\tritone\process"
  690.             ''AddSectionFilesToCopyList "DuoTriGray", SrcDir$, DEST$ + "\duotones\tritone\gray"
  691.             ''AddSectionFilesToCopyList "DuoQuadPms", SrcDir$, DEST$ + "\duotones\quadtone\pms"
  692.             ''AddSectionFilesToCopyList "DuoQuadProc", SrcDir$, DEST$ + "\duotones\quadtone\process"
  693.             ''AddSectionFilesToCopyList "DuoQuadGray", SrcDir$, DEST$ + "\duotones\quadtone\gray"
  694.         ELSEIF ftype% = FILTERFILES THEN
  695.             AddSectionFilesToCopyList "FilterFiles", SrcDir$, DEST$ + "\plugins"
  696.             AddSectionFilesToCopyList "FilterDispFiles", SrcDir$, DEST$ + "\plugins\dispmaps"
  697.             ''AddSectionFilesToCopyList "ThirdPartyFiles", SrcDir$, DEST$ + "\3rdparty"
  698.             AddSectionFilesToCopyList "LightingStyles", SrcDir$, DEST$ + "\plugins\ltstyles"
  699.         ELSEIF ftype% = DELUXEFILES THEN
  700.             AddSectionFilesToCopyList "Quicktime", SrcDir$, QTWDIR$
  701.         END IF
  702.         SrcDir$ = ""
  703.     END IF
  704. END SUB
  705.  
  706.  
  707. '**
  708. '** Purpose:
  709. '**     Recalculates disk space for the given option files and sets
  710. '**     the status info symbol "StatusItemsText".
  711. '** Arguments:
  712. '**     ftype% - type of files to add, one of the following:
  713. '**             PROGRAMFILES, PLUGINFILES...
  714. '** Returns:
  715. '**     none.
  716. '*************************************************************************
  717. SUB RecalcOptFiles (ftype%) STATIC
  718.     CursorSave% = ShowWaitCursor()
  719.     ClearCopyList
  720.     AddOptFilesToCopyList ftype%, 1
  721.  
  722.     fExtra% = 0
  723.     IF ftype% = PROGRAMFILES THEN
  724.     ListSym$ = PROGRAMNEEDS$
  725.     IF GetListItem(CHECKSTATES$, PROGRAMFILES) = "ON" THEN
  726.         ''Add extra cost to Windows drive for ini/progman, etc.
  727.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  728.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  729.         fExtra% = 1
  730.     END IF
  731.     ELSEIF ftype% = TUTORIALFILES THEN
  732.         ListSym$ = TUTORIALNEEDS$
  733.     ELSEIF ftype% = PATTERNFILES THEN
  734.         ListSym$ = PATTERNNEEDS$
  735.     ELSEIF ftype% = DUOTONEFILES THEN
  736.         ListSym$ = DUOTONENEEDS$
  737.     ELSEIF ftype% = FILTERFILES THEN
  738.         ListSym$ = FILTERNEEDS$
  739.     ELSEIF ftype% = DELUXEFILES THEN
  740.         ListSym$ = DELUXENEEDS$
  741.     END IF
  742.  
  743.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  744.  
  745.     cost& = 0
  746.     FOR i% = 1 TO 26 STEP 1
  747.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  748.     NEXT i%
  749.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  750.  
  751.     IF StillNeed& > 0 THEN
  752.     ReplaceListItem BIGLIST$, ftype%, "YES"
  753.     ELSE
  754.     ReplaceListItem BIGLIST$, ftype%, ""
  755.     END IF
  756.  
  757.     IF fExtra% THEN
  758.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  759.     END IF
  760.     RestoreCursor CursorSave%
  761.     ListSym$ = ""
  762. END SUB
  763.  
  764.  
  765. '**
  766. '** Purpose:
  767. '**     Recalculates disk space and sets option status info according
  768. '**     to the current destination path.
  769. '** Arguments:
  770. '**     none.
  771. '** Returns:
  772. '**     none.
  773. '*************************************************************************
  774. SUB RecalcPath STATIC
  775.  
  776.     CursorSave% = ShowWaitCursor()
  777.  
  778.     RecalcOptFiles PROGRAMFILES
  779.     RecalcOptFiles TUTORIALFILES
  780.     RecalcOptFiles PATTERNFILES
  781.     RecalcOptFiles DUOTONEFILES
  782.     RecalcOptFiles FILTERFILES
  783.     IF CD <> 0 THEN
  784.         RecalcOptFiles DELUXEFILES
  785.     END IF
  786.  
  787.     RestoreCursor CursorSave%
  788. END SUB
  789.  
  790.  
  791. '**
  792. '** Purpose:
  793. '**     Sets drive status info according to latest disk space calcs.
  794. '** Arguments:
  795. '**     none.
  796. '** Returns:
  797. '**     none.
  798. '*************************************************************************
  799. SUB SetDriveStatus STATIC
  800.  
  801.     ENOUGHDISK% = 1
  802.     drive$ = MID$(DEST$, 1, 1)
  803.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  804.     cost& = VAL( GetListItem( PROGRAMNEEDS$, ndrive% ) )
  805.     cost& = cost& + VAL( GetListItem( TUTORIALNEEDS$, ndrive% ) )
  806.     cost& = cost& + VAL( GetListItem( PATTERNNEEDS$, ndrive% ) )
  807.     cost& = cost& + VAL( GetListItem( DUOTONENEEDS$, ndrive% ) )
  808.     cost& = cost& + VAL( GetListItem( FILTERNEEDS$, ndrive% ) )
  809.     IF CD <> 0 THEN
  810.         cost& = cost& + VAL( GetListItem( DELUXENEEDS$, ndrive% ) )
  811.     END IF
  812.     free& = GetFreeSpaceForDrive(drive$)
  813.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  814.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  815.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  816.     IF cost& > free& THEN
  817.       ENOUGHDISK% = 0
  818.     END IF
  819.  
  820.     IF drive$ = WINDRIVE$ THEN
  821.     ReplaceListItem DRIVETEXT$, 4, ""
  822.     ReplaceListItem DRIVETEXT$, 5, ""
  823.     ReplaceListItem DRIVETEXT$, 6, ""
  824.     ELSE
  825.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  826.     cost& = VAL( GetListItem( PROGRAMNEEDS$, ndrive% ) )
  827.     cost& = cost& + VAL( GetListItem( TUTORIALNEEDS$, ndrive% ) )
  828.     cost& = cost& + VAL( GetListItem( PATTERNNEEDS$, ndrive% ) )
  829.     cost& = cost& + VAL( GetListItem( DUOTONENEEDS$, ndrive% ) )
  830.     cost& = cost& + VAL( GetListItem( FILTERNEEDS$, ndrive% ) )
  831.         IF CD <> 0 THEN
  832.             cost& = cost& + VAL( GetListItem( DELUXENEEDS$, ndrive% ) )
  833.         END IF
  834.     IF cost& = 0 THEN
  835.         ReplaceListItem DRIVETEXT$, 4, ""
  836.         ReplaceListItem DRIVETEXT$, 5, ""
  837.         ReplaceListItem DRIVETEXT$, 6, ""
  838.     ELSE
  839.         free& = GetFreeSpaceForDrive(WINDRIVE$)
  840.         ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  841.         ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  842.         ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  843.         IF cost& > free& THEN
  844.           ENOUGHDISK% = 0
  845.         END IF
  846.     END IF
  847.     END IF
  848. END SUB
  849.  
  850.  
  851. '**
  852. '** Purpose:
  853. '**     Appends a file name to the end of a directory path,
  854. '**     inserting a backslash character as needed.
  855. '** Arguments:
  856. '**     szDir$  - full directory path (with optional ending "\")
  857. '**     szFile$ - filename to append to directory
  858. '** Returns:
  859. '**     Resulting fully qualified path name.
  860. '*************************************************************************
  861. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  862.     IF szDir$ = "" THEN
  863.     MakePath = szFile$
  864.     ELSEIF szFile$ = "" THEN
  865.     MakePath = szDir$
  866.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  867.     MakePath = szDir$ + szFile$
  868.     ELSE
  869.     MakePath = szDir$ + "\" + szFile$
  870.     END IF
  871. END FUNCTION
  872.  
  873.  
  874.  
  875. SUB UpdateSystemIni STATIC
  876.  
  877.     VxDPath$ = DEST32S$ + "W32S.386"
  878.     SystemIniPath$ = GetWindowsDir()
  879.  
  880.     t% = MakeSystemIni(SystemIniPath$, VxdPath$)
  881.  
  882. END SUB
  883.  
  884.